module success (
    input           I_clk           , // 系统50MHz时钟
    input           I_rst_n         , // 系统全局复位
    input   [6:0]   I_dev_addr      , // IIC设备的物理地址
	 input   [7:0]   I_word_addr     , // IIC设备的字地址，即我们想操作的IIC的内部地址
	 input   [7:0]   I_write_data    , // 
    input     I_iic_send_en,
	 input     choose                ,
	 ///主机-写-从机的输出
	 output reg   [7:0] rec_data ,        //从机接收的数据
	 output reg        ack_out_test,               //从机向主机发送的应答信号
	 output reg         scl_out_test,    ///输出接收的主机时钟线
	 output reg        sda_out_test ,    ///输出接收的主机数据线
	 
	 ///主机-读-从机的输出
	 
	 output  reg        O_done_flag     ,
	 output  reg[7:0]   O_read_data     , // 从IIC设备的字地址读出来的数据 
    output  reg        O_M_scl         , // 主机生成的时钟
	 
	 output  reg[7:0]   S_read_data_reg , /////////////
	 output  reg        I_M_sda         , // 主机接收从机发出的sda线
	 output  reg        O_M_sda           // 主机发出的sda线
);

//例化主机-写-从机
    wire    [7:0] rec_data0 ;        //从机接收的数据
	 wire         ack_out_test0;               //从机向主机发送的应答信号
	 wire          scl_out_test0;    ///输出接收的主机时钟线
	 wire         sda_out_test0 ;    ///输出接收的主机数据线  
 all_top tp(
    .I_clk(I_clk)           , // 系统50MHz时钟
    .I_rst_n(I_rst_n)         , // 系统全局复位
	 //input           I_iic_send_en   , // IIC发送使能位
	 .I_write_data(I_write_data)    ,
	 .I_dev_addr(I_dev_addr),
	 .I_word_addr(I_word_addr),
	 .I_iic_send_en(I_iic_send_en),
	 .rec_data(rec_data0),
	 .ack_out_test(ack_out_test0),
    .scl_out_test(scl_out_test0),
	 .sda_out_test(sda_out_test0) 
);

//例化主机-读-从机
    wire          W_flag0     ;
	 wire  [7:0]   sda_data0     ; // 从IIC设备的字地址读出来的数据 
    wire          O_M_scl0         ; // 主机生成的时钟
	 
	 wire  [7:0]   S_read_data_reg0 ; /////////////
	 wire          I_M_sda0         ; // 主机接收从机发出的sda线
	 wire          O_M_sda0         ; // 主机发出的sda线
  S_M_top top(
  // 5个input
  .I_clk(I_clk),
  .I_rst_n(I_rst_n),
  .I_dev_addr(I_dev_addr),
  .I_word_addr(I_word_addr),
  .I_write_data(I_write_data),
  
  // 6个output
  .O_done_flag(W_flag0),
  .O_read_data(sda_data0),          ///主机接收到的从机发送数据
  .O_M_scl(O_M_scl0),               // 主机生成的时钟
  .S_read_data_reg(S_read_data_reg0),
  .I_M_sda(I_M_sda0),               // 主机接收从机发出的sda线
  .O_M_sda(O_M_sda0)                // 主机发出的sda线
);

always@(*)begin
  if(choose==1'b0)begin
     O_done_flag=W_flag0;
	  O_read_data=sda_data0;
	  O_M_scl=O_M_scl0;
	  
	  S_read_data_reg=S_read_data_reg0;
	  I_M_sda=I_M_sda0;
	  O_M_sda=O_M_sda0;
  end else begin
    rec_data=rec_data0;
    ack_out_test=ack_out_test0;
	 scl_out_test=scl_out_test0;
	 sda_out_test=sda_out_test0;
  end
end
	 
	 

endmodule